import tensorflow as tf
from tensorflow.keras import models, layers
import matplotlib.pyplot as plt
import numpy as np
import pathlib
import os
# Set all the Constants
Image_Size = 256
Batch_Size = 32
Channels = 3
Epochs = 30
# Set the dataset path
dataset_dir = r'D:\Minor-Sem-4\PlantVillage_dataset'
# Import data into tensorflow dataset object
dataset = tf.keras.preprocessing.image_dataset_from_directory(
dataset_dir,
batch_size=Batch_Size,
image_size=(Image_Size, Image_Size),
shuffle=True
)
# Extract class names
class_name = dataset.class_names
# Split Dataset
def get_dataset_partitions_tf(ds, train_split=0.8, val_split=0.1, test_split=0.1, shuffle=True, shuffle_size=10000):
assert (train_split + test_split + val_split) == 1
ds_size = len(ds)
if shuffle:
ds = ds.shuffle(shuffle_size, seed=12)
train_size = int(train_split * ds_size)
val_size = int(val_split * ds_size)
train_ds = ds.take(train_size)
val_ds = ds.skip(train_size).take(val_size)
test_ds = ds.skip(train_size).skip(val_size)
return train_ds, val_ds, test_ds
train_ds, val_ds, test_ds = get_dataset_partitions_tf(dataset)
# Cache, Shuffle, and Prefetch the Dataset
train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
val_ds = val_ds.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
test_ds = test_ds.cache().shuffle(1000).prefetch(buffer_size=tf.data.AUTOTUNE)
# Building the Model
resize_and_rescale = tf.keras.Sequential([
layers.Resizing(Image_Size, Image_Size),
layers.Rescaling(1./255),
])
data_augmentation = tf.keras.Sequential([
layers.RandomFlip("horizontal_and_vertical"),
layers.RandomRotation(0.2),
])
input_shape = (Image_Size, Image_Size, Channels)
batch_input_shape = (Batch_Size, Image_Size, Image_Size, Channels)
n_classes = len(class_name)
model = models.Sequential([
resize_and_rescale,
data_augmentation,
layers.Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, kernel_size=(3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(n_classes, activation='softmax'),
])
model.build(input_shape=batch_input_shape)
model.summary()
# Compile the model
model.compile(
optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics=['accuracy']
)
Found 2152 files belonging to 3 classes.
Model: "sequential_5"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
sequential_3 (Sequential) (32, 256, 256, 3) 0
sequential_4 (Sequential) (32, 256, 256, 3) 0
conv2d_6 (Conv2D) (32, 254, 254, 32) 896
max_pooling2d_6 (MaxPoolin (32, 127, 127, 32) 0
g2D)
conv2d_7 (Conv2D) (32, 125, 125, 64) 18496
max_pooling2d_7 (MaxPoolin (32, 62, 62, 64) 0
g2D)
conv2d_8 (Conv2D) (32, 60, 60, 64) 36928
max_pooling2d_8 (MaxPoolin (32, 30, 30, 64) 0
g2D)
conv2d_9 (Conv2D) (32, 28, 28, 64) 36928
max_pooling2d_9 (MaxPoolin (32, 14, 14, 64) 0
g2D)
conv2d_10 (Conv2D) (32, 12, 12, 64) 36928
max_pooling2d_10 (MaxPooli (32, 6, 6, 64) 0
ng2D)
conv2d_11 (Conv2D) (32, 4, 4, 64) 36928
max_pooling2d_11 (MaxPooli (32, 2, 2, 64) 0
ng2D)
flatten_1 (Flatten) (32, 256) 0
dense_2 (Dense) (32, 64) 16448
dense_3 (Dense) (32, 3) 195
=================================================================
Total params: 183747 (717.76 KB)
Trainable params: 183747 (717.76 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
import visualkeras
visualkeras.layered_view(model, legend=True, scale_xy=0.8)
# Train the model
history = model.fit(
train_ds,
batch_size=Batch_Size,
validation_data=val_ds,
verbose=1,
epochs=Epochs,
)
# Evaluate the model
print("[INFO] Calculating model accuracy")
scores = model.evaluate(test_ds)
print(f"Test Accuracy: {round(scores[1], 4) * 100}%")
# Plot training history
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs_range = range(Epochs)
plt.figure(figsize=(8, 8))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()
# Model Prediction
def predict(model, img):
img_array = tf.keras.preprocessing.image.img_to_array(images[i].numpy())
img_array = tf.expand_dims(img_array, 0)
predictions = model.predict(img_array)
predicted_class = class_name[np.argmax(predictions[0])]
confidence = round(100 * (np.max(predictions[0])), 2)
return predicted_class, confidence
plt.figure(figsize=(20, 20))
for images, labels in test_ds.take(1):
for i in range(9):
ax = plt.subplot(3, 3, i + 1)
plt.imshow(images[i].numpy().astype("uint8"))
predicted_class, confidence = predict(model, images[i].numpy())
actual_class = class_name[labels[i]]
plt.title(f"Actual: {actual_class}, Predicted: {predicted_class}. Confidence: {confidence}%")
plt.axis("off")
Epoch 1/30 54/54 [==============================] - 101s 2s/step - loss: 0.9088 - accuracy: 0.4728 - val_loss: 0.8833 - val_accuracy: 0.6094 Epoch 2/30 54/54 [==============================] - 92s 2s/step - loss: 0.8395 - accuracy: 0.6100 - val_loss: 0.7727 - val_accuracy: 0.6927 Epoch 3/30 54/54 [==============================] - 89s 2s/step - loss: 0.6755 - accuracy: 0.7240 - val_loss: 0.5733 - val_accuracy: 0.7812 Epoch 4/30 54/54 [==============================] - 87s 2s/step - loss: 0.4476 - accuracy: 0.8194 - val_loss: 0.3632 - val_accuracy: 0.8594 Epoch 5/30 54/54 [==============================] - 88s 2s/step - loss: 0.3731 - accuracy: 0.8409 - val_loss: 0.3442 - val_accuracy: 0.8958 Epoch 6/30 54/54 [==============================] - 89s 2s/step - loss: 0.2951 - accuracy: 0.8837 - val_loss: 0.4752 - val_accuracy: 0.7969 Epoch 7/30 54/54 [==============================] - 88s 2s/step - loss: 0.2536 - accuracy: 0.9005 - val_loss: 0.6679 - val_accuracy: 0.7812 Epoch 8/30 54/54 [==============================] - 88s 2s/step - loss: 0.2972 - accuracy: 0.8860 - val_loss: 0.1770 - val_accuracy: 0.9427 Epoch 9/30 54/54 [==============================] - 94s 2s/step - loss: 0.2202 - accuracy: 0.9167 - val_loss: 0.3606 - val_accuracy: 0.8594 Epoch 10/30 54/54 [==============================] - 87s 2s/step - loss: 0.1922 - accuracy: 0.9317 - val_loss: 0.2202 - val_accuracy: 0.9271 Epoch 11/30 54/54 [==============================] - 87s 2s/step - loss: 0.1907 - accuracy: 0.9306 - val_loss: 0.1342 - val_accuracy: 0.9479 Epoch 12/30 54/54 [==============================] - 86s 2s/step - loss: 0.1586 - accuracy: 0.9468 - val_loss: 0.1385 - val_accuracy: 0.9479 Epoch 13/30 54/54 [==============================] - 89s 2s/step - loss: 0.1537 - accuracy: 0.9462 - val_loss: 0.5121 - val_accuracy: 0.8542 Epoch 14/30 54/54 [==============================] - 87s 2s/step - loss: 0.1031 - accuracy: 0.9630 - val_loss: 0.3086 - val_accuracy: 0.9115 Epoch 15/30 54/54 [==============================] - 87s 2s/step - loss: 0.1213 - accuracy: 0.9595 - val_loss: 0.0489 - val_accuracy: 0.9844 Epoch 16/30 54/54 [==============================] - 88s 2s/step - loss: 0.1147 - accuracy: 0.9543 - val_loss: 0.4511 - val_accuracy: 0.8490 Epoch 17/30 54/54 [==============================] - 90s 2s/step - loss: 0.2449 - accuracy: 0.9132 - val_loss: 0.0988 - val_accuracy: 0.9740 Epoch 18/30 54/54 [==============================] - 88s 2s/step - loss: 0.0694 - accuracy: 0.9774 - val_loss: 0.0325 - val_accuracy: 0.9896 Epoch 19/30 54/54 [==============================] - 91s 2s/step - loss: 0.0658 - accuracy: 0.9769 - val_loss: 0.1918 - val_accuracy: 0.9062 Epoch 20/30 54/54 [==============================] - 89s 2s/step - loss: 0.0820 - accuracy: 0.9734 - val_loss: 0.0298 - val_accuracy: 0.9896 Epoch 21/30 54/54 [==============================] - 87s 2s/step - loss: 0.0676 - accuracy: 0.9797 - val_loss: 0.0594 - val_accuracy: 0.9844 Epoch 22/30 54/54 [==============================] - 89s 2s/step - loss: 0.0436 - accuracy: 0.9873 - val_loss: 0.0094 - val_accuracy: 1.0000 Epoch 23/30 54/54 [==============================] - 89s 2s/step - loss: 0.0480 - accuracy: 0.9838 - val_loss: 0.0477 - val_accuracy: 0.9740 Epoch 24/30 54/54 [==============================] - 88s 2s/step - loss: 0.0398 - accuracy: 0.9884 - val_loss: 0.0373 - val_accuracy: 0.9896 Epoch 25/30 54/54 [==============================] - 89s 2s/step - loss: 0.0905 - accuracy: 0.9682 - val_loss: 0.0406 - val_accuracy: 0.9792 Epoch 26/30 54/54 [==============================] - 90s 2s/step - loss: 0.0354 - accuracy: 0.9907 - val_loss: 0.0101 - val_accuracy: 1.0000 Epoch 27/30 54/54 [==============================] - 89s 2s/step - loss: 0.0311 - accuracy: 0.9925 - val_loss: 0.0099 - val_accuracy: 1.0000 Epoch 28/30 54/54 [==============================] - 86s 2s/step - loss: 0.0268 - accuracy: 0.9907 - val_loss: 0.0048 - val_accuracy: 1.0000 Epoch 29/30 54/54 [==============================] - 211s 4s/step - loss: 0.0598 - accuracy: 0.9809 - val_loss: 0.0760 - val_accuracy: 0.9688 Epoch 30/30 54/54 [==============================] - 266s 5s/step - loss: 0.0452 - accuracy: 0.9850 - val_loss: 0.0080 - val_accuracy: 1.0000 [INFO] Calculating model accuracy 8/8 [==============================] - 10s 609ms/step - loss: 0.0246 - accuracy: 0.9922 Test Accuracy: 99.22%
1/1 [==============================] - 1s 1s/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 126ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 78ms/step
from sklearn.metrics import classification_report, confusion_matrix
# Generate predictions for the test set
test_images = []
test_labels = []
predicted_labels = []
for images, labels in test_ds:
for i in range(len(images)):
test_images.append(images[i].numpy())
test_labels.append(labels[i].numpy())
predicted_class, _ = predict(model, images[i].numpy())
predicted_labels.append(class_name.index(predicted_class))
# Calculate metrics
test_loss, test_accuracy = model.evaluate(test_ds)
print(f"Test Loss: {test_loss}")
print(f"Test Accuracy: {test_accuracy}")
# Generate classification report
print("Classification Report:")
print(classification_report(test_labels, predicted_labels, target_names=class_name))
import seaborn as sns
# Plot confusion matrix
plt.figure(figsize=(10, 8))
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=class_name, yticklabels=class_name)
plt.title('Confusion Matrix')
plt.xlabel('Predicted Labels')
plt.ylabel('True Labels')
plt.show()
# Plot separate accuracy and loss curves
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, acc, label='Training Accuracy')
plt.plot(epochs_range, val_acc, label='Validation Accuracy')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()
plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss, label='Training Loss')
plt.plot(epochs_range, val_loss, label='Validation Loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.tight_layout()
plt.show()
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 55ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 78ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 76ms/step
1/1 [==============================] - 0s 76ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 77ms/step
1/1 [==============================] - 0s 82ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 81ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 66ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 77ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 65ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 56ms/step
1/1 [==============================] - 0s 61ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 60ms/step
1/1 [==============================] - 0s 61ms/step
1/1 [==============================] - 0s 58ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 80ms/step
1/1 [==============================] - 0s 55ms/step
1/1 [==============================] - 0s 79ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 60ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 56ms/step
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 79ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 55ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 65ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 59ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 77ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 65ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 60ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 65ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 55ms/step
1/1 [==============================] - 0s 57ms/step
1/1 [==============================] - 0s 65ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 56ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 56ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 77ms/step
1/1 [==============================] - 0s 66ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 65ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 65ms/step
1/1 [==============================] - 0s 83ms/step
1/1 [==============================] - 0s 58ms/step
1/1 [==============================] - 0s 66ms/step
1/1 [==============================] - 0s 76ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 78ms/step
1/1 [==============================] - 0s 82ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 76ms/step
1/1 [==============================] - 0s 63ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 79ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 84ms/step
1/1 [==============================] - 0s 61ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 66ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 80ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 76ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 66ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 62ms/step
1/1 [==============================] - 0s 84ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 61ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 56ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 61ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 76ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 77ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 57ms/step
1/1 [==============================] - 0s 66ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 82ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 70ms/step
1/1 [==============================] - 0s 69ms/step
1/1 [==============================] - 0s 75ms/step
1/1 [==============================] - 0s 76ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 80ms/step
1/1 [==============================] - 0s 67ms/step
1/1 [==============================] - 0s 73ms/step
1/1 [==============================] - 0s 101ms/step
1/1 [==============================] - 0s 157ms/step
1/1 [==============================] - 0s 82ms/step
1/1 [==============================] - 0s 83ms/step
1/1 [==============================] - 0s 58ms/step
1/1 [==============================] - 0s 117ms/step
1/1 [==============================] - 0s 68ms/step
1/1 [==============================] - 0s 80ms/step
1/1 [==============================] - 0s 135ms/step
1/1 [==============================] - 0s 83ms/step
1/1 [==============================] - 0s 78ms/step
1/1 [==============================] - 0s 83ms/step
1/1 [==============================] - 0s 72ms/step
1/1 [==============================] - 0s 85ms/step
1/1 [==============================] - 0s 81ms/step
1/1 [==============================] - 0s 82ms/step
1/1 [==============================] - 0s 64ms/step
1/1 [==============================] - 0s 96ms/step
1/1 [==============================] - 0s 60ms/step
1/1 [==============================] - 0s 80ms/step
1/1 [==============================] - 0s 74ms/step
1/1 [==============================] - 0s 71ms/step
1/1 [==============================] - 0s 78ms/step
1/1 [==============================] - 0s 84ms/step
1/1 [==============================] - 0s 77ms/step
1/1 [==============================] - 0s 146ms/step
1/1 [==============================] - 0s 112ms/step
1/1 [==============================] - 0s 77ms/step
1/1 [==============================] - 0s 81ms/step
1/1 [==============================] - 0s 76ms/step
8/8 [==============================] - 10s 1s/step - loss: 0.0246 - accuracy: 0.9922
Test Loss: 0.024592716246843338
Test Accuracy: 0.9921875
Classification Report:
precision recall f1-score support
Potato___Early_blight 1.00 0.99 1.00 134
Potato___Late_blight 0.99 0.99 0.99 106
Potato___healthy 0.94 1.00 0.97 16
accuracy 0.99 256
macro avg 0.98 0.99 0.99 256
weighted avg 0.99 0.99 0.99 256
# Count correct and incorrect predictions
correct_predictions = 0
total_predictions = 0
for images, labels in test_ds:
for i in range(len(images)):
total_predictions += 1
predicted_class, _ = predict(model, images[i].numpy())
if predicted_class == class_name[labels[i]]:
correct_predictions += 1
# Print correct and incorrect predictions
print("Total predictions:", total_predictions)
print("Correct predictions:", correct_predictions)
print("Incorrect predictions:", total_predictions - correct_predictions)
# Save the model
model.save("plant_disease_model.h5")
print("Model saved successfully.")
1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 68ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 68ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 67ms/step 1/1 [==============================] - 0s 83ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 69ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 57ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 69ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 104ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 61ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 69ms/step 1/1 [==============================] - 0s 62ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 66ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 74ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 80ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 69ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 80ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 68ms/step 1/1 [==============================] - 0s 66ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 62ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 68ms/step 1/1 [==============================] - 0s 69ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 62ms/step 1/1 [==============================] - 0s 67ms/step 1/1 [==============================] - 0s 81ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 67ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 59ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 74ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 69ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 60ms/step 1/1 [==============================] - 0s 69ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 74ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 81ms/step 1/1 [==============================] - 0s 57ms/step 1/1 [==============================] - 0s 69ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 67ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 66ms/step 1/1 [==============================] - 0s 66ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 66ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 62ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 66ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 68ms/step 1/1 [==============================] - 0s 74ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 84ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 68ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 85ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 61ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 67ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 83ms/step 1/1 [==============================] - 0s 81ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 84ms/step 1/1 [==============================] - 0s 87ms/step 1/1 [==============================] - 0s 128ms/step 1/1 [==============================] - 0s 82ms/step 1/1 [==============================] - 0s 145ms/step 1/1 [==============================] - 0s 95ms/step 1/1 [==============================] - 0s 100ms/step 1/1 [==============================] - 0s 173ms/step 1/1 [==============================] - 0s 137ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 148ms/step 1/1 [==============================] - 0s 97ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 167ms/step 1/1 [==============================] - 0s 66ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 74ms/step 1/1 [==============================] - 0s 94ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 111ms/step 1/1 [==============================] - 0s 83ms/step 1/1 [==============================] - 0s 80ms/step 1/1 [==============================] - 0s 78ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 55ms/step 1/1 [==============================] - 0s 80ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 75ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 105ms/step 1/1 [==============================] - 0s 103ms/step 1/1 [==============================] - 0s 108ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 68ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 62ms/step 1/1 [==============================] - 0s 81ms/step 1/1 [==============================] - 0s 77ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 79ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 63ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 67ms/step 1/1 [==============================] - 0s 80ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 68ms/step 1/1 [==============================] - 0s 73ms/step 1/1 [==============================] - 0s 66ms/step 1/1 [==============================] - 0s 62ms/step 1/1 [==============================] - 0s 57ms/step 1/1 [==============================] - 0s 65ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 56ms/step 1/1 [==============================] - 0s 74ms/step 1/1 [==============================] - 0s 64ms/step 1/1 [==============================] - 0s 56ms/step 1/1 [==============================] - 0s 70ms/step 1/1 [==============================] - 0s 72ms/step 1/1 [==============================] - 0s 76ms/step 1/1 [==============================] - 0s 71ms/step 1/1 [==============================] - 0s 62ms/step Total predictions: 256 Correct predictions: 254 Incorrect predictions: 2 Model saved successfully.
C:\Users\ayush\anaconda3\lib\site-packages\keras\src\engine\training.py:3000: UserWarning: You are saving your model as an HDF5 file via `model.save()`. This file format is considered legacy. We recommend using instead the native Keras format, e.g. `model.save('my_model.keras')`.
saving_api.save_model(